from z3 import *

n = 2230791374046346835775433548641067593691369485828070649075162141394476183565187654365131822111419512477883295758461313983481545182887415447403634720326639070667688614534290859200753589300443797
c = 2168563038335029902089976057856861885635845445863841607485310134441400500612435296818745930370268060353437465666224400129105788787423156958336380480503762222278722770240792709450637433509537280
hint = 392490868359411675557103683163021977774935163924606169241731307258226973701652855448542714274348304997416149742779376023311152228735117186027560227613656229190807480010615064372521942836446425717660375242197759811804760170129768647414717571386950790115746414735411766002368288743086845078803312201707960465419405926186622999423245762570917629351110970429987377475979058821154568001902541710817731089463915930932142007312230897818177067675996751110894377356758932
e = 65537

import libnum

p = Int('p')
q = Int('q')
s = Solver()
s.add(q*p==n)
s.add(p**3-q**5==hint)

if s.check() == sat:
    model = s.model()
    print(model)
else:
    print("No solution found")

p = int(str(model[p]))
q = int(str(model[q]))
n=p*q
phi=(p-1)*(q-1)
print(phi)
d=libnum.invmod(e,int(phi))
m=pow(c,d,n)
print(libnum.n2s(int(m)))